package ao.com.bna.util;


import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class FormatarNumero {

	/**
	 * @param args
	 */
	 private static final String PONTO = ".";  
	
	 public static double dformatarCasaDecimais(double valor){ 	    
		  DecimalFormat decform = new DecimalFormat("####.00000");
	      Double.parseDouble(decform.format(valor));
	      return Double.parseDouble(decform.format(valor));   
	 } 

	 public static String sformatarCasaDecimais(double valor){ 	    
		 DecimalFormat decform = new DecimalFormat("####.00000");
	     return decform.format(valor);   
	 } 
       
	 //customFormat("###,###.###", 123456.789);
	 //customFormat("0.00000", 123.78);
	 static public String customFormat(String pattern, double valor) {
		    DecimalFormat myFormatter = new DecimalFormat(pattern);
		    return myFormatter.format(valor);
     }

	  public static double tratarNumero( double num,int inteiro,int decimal){
		     Double f = new Double(num);
		     String s = f.toString();
		     String str ="";
		     s = s.replaceAll("[.]", "");
		     s = s.replaceAll("[,]", "");
		     
		     int totalNumero = inteiro + decimal; // tamanho do numero configuravel
		     int diferenca = s.length() - totalNumero;
		    
		     if (s.length() < totalNumero){ //se a taxa tem menos casas que o total da parte inteira e decimal.
		    	 s =s.substring(0,inteiro)+"."+ s.substring(inteiro,s.length());
		    	// System.out.print("**** " + s); 	
		     }
		     else{
		        s =s.substring(0,inteiro)+"."+ s.substring(inteiro,s.length()-diferenca);
		     }
		     return  Double.parseDouble(s); 
		  } 
	 public static int obterParteFracionaria(double num1){
		  List <String> horarios;
	      String h = Double.toString(num1);
	      StringTokenizer token = new StringTokenizer(h,PONTO);
		  horarios = new ArrayList<String>();
	      boolean achou = false;
	      
	    while (token.hasMoreTokens()) {
	      if (token.equals(".")){
	        achou = true;
	      }
	      
	      if (achou){ 
			 horarios.add(token.nextToken()); //parte inteira
	         return  0 ;
	      }  
	      else{
	          token.nextToken();   // parte fraccionario 
	          return token.nextToken().length();
	       }
		 }
	      return  0 ;
	   }
	 
	 public static double arredondar(double valor, int casas, int ceilOrFloor) {  

		  double arredondado = valor;  
		  arredondado *= (Math.pow(10, casas));  
		  if (ceilOrFloor == 0) {  
		       arredondado = Math.ceil(arredondado);           
		  } 
          else if(ceilOrFloor == 1) {  
		       arredondado = Math.round(arredondado);  
		  } 
          else {  
		       arredondado = Math.floor(arredondado);  
		  }  
		  arredondado /= (Math.pow(10, casas));  
		  
		  return arredondado;  
	 }
	 private static double roundit(Double num, int places) {
			if (places > 0) {
				if ((num.toString().length() - num.toString().lastIndexOf('.')) > (places + 1)) {
					double rounder = Math.pow(10, places);
					return Math.round(num.doubleValue() * rounder) / rounder;
				} else
					return num.doubleValue();
			} else
				return Math.round(num.doubleValue());
		}
}
